 SFHack Main Document                                                 v1.0
------------------------------------------------------------------------------
                                                             Copyright 1998-99
SFHack                                                          by Phil Holman
-------------------------------------------------------------------------------

        This program may be freely distributed and used for
        non-commercial purposes.
        
-------------------------------------------------------------------------------

           Please ignore spelling errors-
                I tried to avoid spending excessive amounts
                of time on this. Also excuse the lack of
                documentation, I think to cover most of the
                questions that I could foresee in the
                short Q & A section below. Basically, I
                haven't slept well in about three weeks and
                don't feel like writing a twenty page
                document over the structure of the ROM and
                SRAM data. I also assume that most users
                wouldn't want to read something that long.
                So, if you have more questions, send them
                to the site and I'll try to handle them as
                they come.

-------------------------------------------------------------------------------

Changes to SFHACK.EXE:

(Rel-6) 0.73    Added mode for changing a ROM character's sizes
                (Allows for more flexible suit changes) and fixed
                an incorrect reference in the body and portrait
                IDs (Hashimoto and Muto were switched). Also
                changed the references to Black Tiger to Black
                Tiger II.
        0.72    Added mode for changing a ROM character's stance
                (Allows for more flexible suit changes).
        0.71    Added mode for changing a ROM character's body
                graphic (Allows for more flexible suit changes).
        0.70    Added mode for dumping a link table for the game
                techniques. (Might lead to the ability to define
                new moves, but don't get your hopes up)
(Rel-5) 0.69    Finally added the English Locale move names. Ugh.
                This is the final planned release.
(Rel-4) 0.68    Fixed a bug in the Module character SRAM refreshing
                mode. Due to the nature of the bug, going to make
                another release.
        0.67    Fixed two bugs (ugh!) in the ROM character to SRAM
                converting routines. 
        0.66    Added mode for changing the ID strings of a module
                record
(Rel-3) 0.65    Added module mode to set a character's portrait and
                body graphic.
        0.64    Added mode to change the finishers of a character
                stored in a module record. (I overlooked this earlier)
                Also swapped the order of arguments to the SCM mode
                for conformity with the SCR and SCS modes.
        0.63    Added a mode to set the ROM elimination team members
                and name (only label table editing mode expected)
        0.62    Added mode to write the ROM character finisher array
                and added the FVAL macro to the preprocessor.
        0.61    Added helper utility for working with the label table
                (shows a range of label values)
        0.60    Added SPCVAL and INDEX (ROM characters only) macros
                to the preprocessor to support the movelist batch
                file template. Also fixed the 'Sleeper Holf' spelling
                error in the move names.
        0.59    Added SRAM character merging modes to make tweaking
                SRAM characters with multiple outfits easier.
        0.58    Combined the previously mentioned two modes.
        0.57    Added SRAM body graphic changing mode to allow users
                to access the hidden Giant Baba graphic (124).
        0.56    Added SRAM portrait changing mode to allow users to
                access the hidden Giant Baba portrait (106).
        0.55    Added mode for changing the ROM character's suit.
        0.54    Dropped restriction on changing locked attributes in
                the SRAM defaults records and added mode for changing
                ROM character's suit colors.
        0.53    Removed the mass/weight conversion from the converting
                modes due to an overflow problem that occurs when the
                wrestlers weight exceeds 255 lbs.
        0.52    Added metric system converting mode for the character
                intro stats to undo english system conversions
        0.51    Added english system converting mode for the character
                intro stats
        0.50    Added refresh SRAM modularized character mode
        0.49    Added true random opponent list generating mode for the
                ROM championship and title matches. This version does
                not group pairs of listfile characters as assumed
                tag teams. Each character is chosen individually.
        0.48    Added random opponent list generating mode for the
                ROM championship and title matches
        0.47    Added normal opponent list generating mode for the
                ROM championship and title matches
        0.46    Added ROM Championship opponent list dumping mode
        0.45    Added SRAM Clear Slot mode
        0.44    Added SRAM Safe Delete Slot mode
        0.43    Added SRAM Undelete Slot mode
        0.42    Added ROM Elimination team dumping mode
        0.41    Added ROM Elimination team catalog mode
        0.40    Added SRAM Elimination team catalog mode
        0.39    Added SRAM Elimination team dumping mode
        0.38    Rewrote the federation member listing mode and altered
                the title match display mode so that both read the
                ROM character information from the ROM rather than
                assuming the original character set.
        0.37    Added a ROM character cataloging option. Starting to
                revamp the handling of ROM characters to so that
                they are more generalized.
        0.36    Added ROM character to module dumping mode.
        0.35    Added ROM character introduction display mode.
        0.34    Added Special Category command line item to all move
                changing modes.
(Rel-2) 0.33    Added ROM to SRAM character converting mode and
                fixed bug in the Make detection that sometimes
                failed to find when Fly Out Of Ring and Run Up Post
                are set.
        0.32    Added the safe delete and undelete module character
                modes.
        0.31    Finally found the ROM character suit colors and
                updated ROM character routines and general character
                color storage. Also added CDBx-y macro symbol.
        0.30    Added combine multiple modules mode.
        0.29    Added module to module character copying mode.
        0.28    Added modes to dump the current options settings
                in the SRAM and set the flags that activate the
                Title Match and the hidden features.
        0.27    Added modes to dump title and championship
                match records. Also did some cleanup rewriting
                to optimize the utility.
(Rel-1) 0.26    Added title display and set modes for module
                characters.
        0.25    Added preprocessor mode for module characters.
        0.24    Fixed SRAM character entry count bug and added
                explicit SRAM count correction mode.
        0.23    Fixed minor bug in IPS patching routine. Also,
                finally figured out the remaining bytes in the
                character records. Removed the unknown option
                from the dumping routines and modified the
                preprocessors for the new data.
        0.22    Replaced all character dumping modes with the
                more general-purpose SRAM character preprocessor
                mode. Haven't removed dumpers yet due to testing.
        0.21    Found the federations setup lists in the ROM
                and added a dumping mode for them.
        0.20    Found the color database of the ROM characters,
                but still haven't found the character color
                references themselves. They must use a weird
                format. Anyway, added dumping mode for them.
        0.19    Found some testing character move sets while
                looking for the ROM character colors (again)
                and added a dumping mode for them. (No point)
        0.18    Added modes that write a character from either a
                module or SRAM slot into the ROM default character
                slot.
        0.17    Found location of SRAM default character in ROM
                and added SRAM default character dumping mode.
        0.16    Added SRAM match defaults editor. Can now play a
                Battle Royal and go out of the ring.
        0.15    Found move table in the ROM and did preliminary
                work on creating a patch to make all moves
                accessible. Added move set dumping mode.
        0.14    Added SRAM match defaults dumping modes. Setup for
                editing match defaults to allow out of ring battle
                royals.
        0.13    Added SRAM-to-SRAM character copying mode.
        0.12    Added range-based IPS patch generator to help make
                the SFHack patches.
        0.11    Modified module format to provide for deleted module
                characters, modified existing module routines, and
                added module character deletion mode.
        0.10    Added module-to-SRAM character restoring mode.
        0.09    Added move modification mode for module character.
        0.08    Added module character dumping mode.
        0.07    Finished SRAM character module mode. Added SRAM and module
                cataloging modes.
        0.06    Preliminary work on character module dumper.
        0.05    Added character move modification modes for SRAM and
                ROM characters.
        0.04    Added character titles modification modes for SRAM
                and ROM characters.
        0.03    Tested and modified the title status dumping modes
                for the SRAM and ROM characters.
        0.02    After two days of state space searching, figured out
                how the SRAM checksum works. I feel really stupid for
                wasting that much time checking CRC methods. Added the
                checksum correction mode.
        0.01    Tested and modified the SRAM and ROM character
                dumping modes. SRAM information has been found, but
                the ROM character colors are yet to be found.
        0.00    Combined independent utilities into one utility, using
                the command line mode to select the operation. Factored
                out common code to reduce redundancy. Removed some
                range arguments to make the utility atomic.

-------------------------------------------------------------------------------

                                Q & A

I. What is this?

        SFHack is a general utility for manipulating the ROM and SRAM files
        for the Super Fire ProWrestling X Premium game. All of the available
        operations were developed by reverse engineering, via poking and
        proding, the structure of the two file types mentioned above. For
        this reason, this utility should only be used with ROMs in FIG
        format.

II. Why?

        SFHack started as a collection of 5-10 small utilities for performing
        various functions. Originally, I began analyzing the SRAM file in
        hopes of unlocking additional moves and/or characters that may exist
        in the ROM, but be inaccessible in the game. (It is no uncommon for
        a game company to disable moves that are deemed too powerful after
        some test play. However, to avoid the need for restructuring, the
        move is usually left in the game, but not referenced.) Most of the
        utilities were bootstraps which only dumped information. For this
        reason, many of them will be omitted from the binary releases. 

        Another motivation was to create a utility that allowed quick and
        easy creation of templates in any format. After creating about
        fifty characters, I noticed how time-consuming it was to write down
        the information as created the characters. Also, it was a pain in
        the ass to maintain either documents or files. So, I thought it
        would be nice to have a utility to simply took the SRAM and showed
        me everything about the character. That way, if I wanted to replace
        a character in the SRAM, I could dump the information first so that
        I could remake him later.

        My other character-related motivation was to provide a method to
        transfer characters betweem SRAM files independently. This means
        coming up with an exchange format and character insertion. Later on,
        I decided that, by slightly shifting this goal, a method could be
        produced to archive characters independent of the SRAMs in file that
        could hold an arbitrary number of characters. This idea made me
        smile.

        Finally, at the time the analysis began, the best emulator to play
        on was SNES9x. However, SNES9x did not allow resetting or loading
        of SRAMs of the SFPWXP size. For this reason, the hidden moves and
        characters were inaccessible. I figured that if I were going to be
        analyzing the SRAM anyway, I would eventually figure out where the
        switch is that makes the characters and moves accessible.

III. What about the non-utility stuff?

        Here's the long version:

        After doing a considerable amount of analysis, I had a few utilities
        and lots of information. Among this information is internal codes
        for letter tiles, moves, and other junk. While looking through the
        ROM one day for the some reason (memory fails at times), I stumbled
        across a label set. What intrigued me was the use of a seperator
        between the strings. Having been schooled in basic computer theory,
        this caught my eye. You see, seperators are only used in fixed length
        entries (to show an end of the value before the end of the record)
        and in variable length entries (to simply denote the end of the value
        in a 'read until xxx is reached' fashion). Since the strings did not
        all use the same length, this implies the latter of the two. The
        interesting thing about variable length records is that all the
        program knows about them is where to start and where to end. Since,
        I knew the the ending symbol, I just needed to find the starting
        addresses. After a little more searching, bingo!

        So now I know where and how labels are stored. This allows me to
        rewrite the starting addresses and label data to make a full
        translation. Yeah! So I started writing a utility to do so. After
        about two hours of work, the compilation started bombing due to
        DOS's shitty memory segmentation. After a few minutes of cursing
        and hair pulling, I decided that this utility was just not feasible
        in real-mode DOS. Nor was this utility worthy of bothering to learn
        protected mode programming. Therefore, I decided to transfer the
        utility to Linux, my environment of choice. Then, after patching the
        ROM, I would generate patches that replaced the label table, rather
        than trying to provide a utility to do so. This also prevents people
        from mucking up the net with forty thousand custom ROMs. After
        considering this, I was kinda glad that the utility wouldn't work
        under DOS. So, the SFHack patches were born.

        Here's the short version: 

        Any large-scale modifications for the ROM will be provided through
        patches to conserve memory within the utility.

IV. I hate this utility. It is a pain in the ass to use.

        No kidding. That is intentional. When I decided to create a single
        utility to do all of the operations, I was intending it to be a
        UNIX-like atomic utility (ie. one run performs one and ONLY one
        operation). I figured that the people who write front ends well
        could program a front end to add user friendliness and perform
        complex operations made up of these atomic operations. This can
        also be done through batch files, which I recommend to anyone
        who uses DOS-based utilities.

V. Where the hell is the rest of the modes mentioned in the Changes section?

        In the binary releases, I am only including finished modes that
        serve a purpose. The majority of the modes in the binary are
        bootstraps for developing the utility's intended modes. For example,
        I am not going to include any modes for dumping internal ROM lists
        in the binary releases since knowing this information is pointless
        for users.

VI. What's with the extra stuff that I have to enter when dumping to modules?

        The portable modules used to transfer characters outside of the
        SRAMs are simply SRAM character records along with some supporting
        information for the module. Among the supporting information are
        three strings used to identify the character when cataloging a
        module. The first string is intended to be the name of the character.
        The second string is some phrase that describes the character's
        suit, persona, or time period (to distinguish it from other versions
        of the same character). Finally, the third string is to identify
        the creator of the character. (I put this in because a large number
        of the SRAMs on the net use the same general characters and outfits.
        There would be no way to put all of these into a single archive
        without introducing ambiguity into the catalog.) As an example of
        dumping a character into a module, assume I made a wrestler to
        model Bret Hart during the Hart Foundation days. Also, assume the
        suit I am using is the all pink with a white stripe suit. Now, to
        store this character (assume he is in sfpwx.srm in edit slot #2)
        in a NEW module, I could use a command line like this:

                        (ignore the line break)
        sfhack mcs sfpwx.srm 2 "Bret Hart" "Hart Foundation - Pink"
            "P.Holman" hart.mod 0

        What this does is create a new module named hart.mod that has
        the character data stored in the record located at offset 0
        along with the string identification string. If the module
        is then cataloged, an entry similar to the following would
        appear:

               0:  Bret Hart / Hart Foundation - Pink / P.Holman
        
        The record offset (0 in this case) is the number used to
        specify the slot during operations (in the same manner as you
        identify an edit slot by using a slot number in the range
        1 - 80).

V. I have some great ideas, can you make ... ?

        I am constantly trying to figure out what I can and cannot
        do with what I have to work with here. If you do have a
        REASONABLE suggestion, I will be glad to consider it, but
        keep in mind that the ROM size cannot change and the internal
        code cannot change. For example, do not ask me if I can put
        steel cage or barb wire matches in the game. I wouldn't even
        know where to begin explaining how unrealistic of a request
        this is.

VI. But didn't you say that you reprogrammed the ROM when you did ... ?

        No. To do the name table and move table patches, I replaced
        data structures, which is the raw data the program uses to
        do calculations. I have not and am not capable of changing
        the game's operating code. This means that if something is
        not controlled or setup using a data structure, I cannot change
        it. What I do is like feeding a calculator a different set of
        numbers, not reprogramming the calculator to handle the entered
        numbers differently.

VII. What do the preprocessor options do?

        The preprocessors read a character record and then filter a
        text file. When preprocessor symbols are found, of the form
        $$(SYMBOL), the program replaces the sequence with either
        text to represent an attribute of the character or nothing
        depending in the attribute, character type being used, and
        the SYMBOL in the macro. See the MACROS file for a list of
        available macros. Also, see the files in the TEMPLATE directory
        fo examples of the macros' uses.

VIII. Where did all of the extra moves come from?

        There were a few moves that were not linked in the game.
        Every game usually has a few of these that are removed because
        they are too powerful or are buggy in certain conditions.
        For example, the Reverse Indian Death Lock (Antonio Inoki)
        will not bring a submission sometimes and the ass-kicking
        karate rush only goes side-to-side. There is also a reverse
        tackle, which is the back grapple takedown that is associated
        with the X button when you select Takedown instead of Hammer
        Throw. All other moves come from structural compatibility
        with other categories. For example, rushing and versus rushing
        moves use the same structure. This allows a rushing move to
        be used in a versus rushing category without error.

        However, do not assume that compatibility implies correctness.
        For example, a large number of moves are simply grapple moves.
        This includes corner, front, back, and versus back grapples.
        But, when you use a back grapple move in a front grapple
        category, it looks like s***. The characters will suddenly
        jumps locations at the start of the move. Also, some moves,
        like the clothesline, can generate a stalemate condition when
        used in a non-intended category. Basically, with my move sets,
        I tried to allow all reasonable moves (and even a few that I
        personally think should not be used in certain locations- like
        using the versus back grapple Ace Crusher from a Front Grapple)
        from a given position. It is up to the creators to choose moves
        that do not jump around or act buggy. If you are dead set on
        using a move that is not setup in the move patch, it can be
        done using the SFHack utility.

        While I am on this topic of changing moves, let me say this-
        in my opinion, the ROM characters should NOT be edited. SFPWXP
        is a very well-designed and implemented game and I personally
        don't see the point in trying to hack the ROM characters to
        enhance or replace them. If you dump the ROM character
        information, you will see that most of them are reasonable
        characters intended to keep the game playable rather than the
        100 point supermen that some people seem to prefer. In short,
        I think the designers did a good job in designing the characters
        and am not going to start second guessing them.

IX. I put in a move number and the wrestler does this strange lock-up motion.
    What's happening?

        When a move is non-existant or is in an imcompatible category,
        the wrestler does weird things which can range from nothing to
        going through a sequence of positions (which sometimes ends in
        a lockup). I do know what's happening here- but, trust me, it
        isn't worth the time it would take to explain. Put simply, use
        a different move, that one doesn't work.

X. Where's the Death Valley Driver and the other 'hidden' moves I heard about?

        They were never implemented. The labels were apparently written
        before the game was implemented, so many of the moves labels
        reference non-existent moves.

XI. One of the options is to set a character's finishers. I thought a character
    only has one finisher?

        Since many moves can be done from multiple positions, such as
        Fujiwara's armbar, the character records, including SRAM records,
        allow the storage of three finishers. However, there is no
        restrictions to prevent these finishers from referencing different
        moves, like Sting's Stinger Splash, Scorpion Death Drop, and Scorpion
        Death Lock. The character edit screen only shows one and I honestly
        have not tested to see if the other two are cleared when you load
        and resave a character with three finishers. Although I have know
        way of knowing it for sure, I assume that the game still recognizes
        the extra two finishers in SRAM records.

XII. What about ..., why would you go ahead an implement something as
     complicated as ... without do the other one first?

        Keep in mind, this utility is under heavy development. When I get
        a chance to work on it, I generally add two options a day. However,
        a large portion of my time in this project goes to looking for
        general goals, like the last fragments of the ROM character records
        and the SRAM flag to active the hidden characters. Most of these
        things I can find, but it takes time. In the time that I spend looking
        for these things, I could implement hundreds of little modes, but
        I consider these searches to be of more importance right now. After
        all, if what I know now has lead me to an incorrect assumption, I
        don't want to implement thirty modes based on that assumption and
        have to recode them later. Just two days ago, I assumed that each
        character had only one finisher. What a difference a day can make.
        (I'm going to go kill myself now for saying that)

XIII. How long until you implement a mode to ...?

        Don't know. I'm not really working off of a game plan here. I'm
        am mainly working on new modes where I have to look up information
        first, but I occasionally see a mode that is missing that I
        consider there to be an immediate enough need for. For example,
        the next modes I implement will probably be to move characters
        between two modules and combine two module archives into one.

XIV. Is there any point to editing match defaults?

        Actually, yes. The main reason I added this mode was to be able
        to set Battle Royals to non-lumberjack matches. However, after
        doing so, I realized why they were disabled. Apparently, the
        matches were originally intended to allow non-lumberjack mode,
        but the game could not properly distinguish between winning and
        losing by count out. This is fine as long as the match does not
        end on a countout, but if the match ends on a count out or
        double count out, the game always rules the match a draw. So I
        recommend setting the countout rate to none when you play this
        match style. (gives it more of a street fight feel with no
        timout anyway) Most everything else I have tested, like setting
        battle royals to 3 falls, has been simply ignored by the game,
        so the out of ring battle royal may be the only real interesting
        effect.

XV. Why can't I pin someone with the A button? Isn't that compatible?

        Yes, it is. The reason I did not allow pinning with the A button
        was the ROM logic. The CPU logic that the characters use lump
        all finishing mat moves together into the FINISH category in the
        OPPONENT DOWN ON MAT sections of the logic menu. When the CPU
        wrestler get a FINISH signal, it selects one of the B moves to
        try to finish with. For this reason, if a creator puts the pinning
        moves in the A categories, the computer can't find them. (Actually,
        you could explicitly set the percentages to make it select a
        finishing A move, but then you would lose virtually all control
        over the B category mat moves.) Anyway, by not allowing pins in
        the A category, I forced the creators to put the pins in B, as
        the logic assumes. I also do not recommend putting hitting
        attacks, like Leg Drops, in the B categories for the same reasons,
        but this is not as threatening to the behavior of the logic, so
        it is allowed by the patch.

XVI. Why does the colors used to emphasize the move names change between
     different menus?

        The text coloring is done through the use of text emphasis flags.
        The game uses ten flags to emphasize text within the game. However,
        the catch is that the emphasis depends on where the text is. Each
        menu uses a different effect for the emphasis flags. This is what
        causes some of the names to cycle colors in the moves selection
        menu, but remain as a constant color when shown in the intro and
        match screens. The only bad side effect that I has found is that
        the red emphasis used for illegal moves gets a white outline in
        the logic menus, which looks awful. There is nothing that can be
        done to prevent this without screwing up the appearance of the
        menus, so, if it bugs you, you should probably use one of the
        non-color patches.

XVII. I tried to change a move in the Special Attack category using SFHack,
      but the move screws up when I try it. What's happening?

        Special attacks span multiple categories. For this reason, the
        game has to store a flag to denote which category the move is
        in. The move category changes in the moves section when you
        cross one of the glowing or grayed out (depending on which patch
        you are using) section headers in the special attack list.
        If you change the move, but do not update the category, the
        computer tries to do the move in the old Special Attack's category.
        To work around this, change the category of the move in the game's
        edit menu by selecting any move in the desired move's category.
        After saving the character, you should be able to change the move
        to any other move in the selected category without error.

        As of version 0.34, the special category is required when
        setting the Special Category's move. The codes used for this
        were added to the CODES file.

XVIII. Where is the English locale patch?

        The site distributing this package was setup to select a list of
        names for that patch. I decided to prematurely release the package
        so that people could get adjusted to the modules and preprocessor.
        The English locale patch(es) will be posted to the site later.

XIX. I was using your Japanese locale patch and know the move your calling
     ..., but it's real name is ....

        I don't care. The Japanese locale patch was made using Sydra and
        Kagura's translations and is intended to mirror the original game's
        move names, not the currently popular set of names. The English locale
        name patch will serve this purpose and is the original purpose of
        the project's site. In short, don't send me corrections to the
        Japanese locale patch unless you can read Japanese and have translated
        the original ROM. (I mean, what'dya think I am...crazy! I don't want
        to call a Drop Toe Hold a Crab Nip either- it sounds perverted)

XX.  I was playing and found a message that said U-???. What is that?

        That is an unknown label code. This is the method I used to locate
        labels so that I could figure out what text to put there and how to
        space it. There are still about thirty U codes floating around in
        the ROM and I occassionally stumbled across one. If you find one,
        please send email that stated the number of the code and the
        conditions that made it appear (ie. what menu, options settings,
        etc.)

XXI. What are the header lines over the wreslter names in the introduction?
     Do you need help getting more nicknames for the people?

        The header lines are only temporary until I can get some translations
        for the text that originally went there. I just saw no point in leaving
        104 unknown codes in the introduction since I know where they are
        already.

XXII. What are the different patches?

        These patches were NOT generated with SNESTool and may not
        be compatible with it. They should be applied using IPS.EXE,
        with which they were tested previously.

        CHAMP-O.IPS     Patch to restore the Championship and Title
                        matches' opponents listings to their original
                        order.
        DEF-150.IPS     Patch replaces the ROM's default edit wrestler
                        with one that has a complete title status. This
                        set the default character to the 150 point limit.
        FIXHEAD.IPS     Patch that converts my old ROM, which still
                        had Sakaguchi's head blown up, into the
                        baseline version found by CrowSting (thanx again).
                        This may fix other ROMs that have that remaining
                        exploded head after use the first fix patch. I
                        don't know.
        INTRO-x.IPS     Fix patch for the ROM character introduction
                        records. The introduction locks up on Bruiser
                        Brody normally. This fix only works with
                        releases 2 and on of the Japanese patch. It
                        will work with any version of the English
                        patch.
        INTRO-O.IPS     Patch to restore the ROM character introduction
                        records to their original state.
        MSG-x.IPS       Correct subtext messages for navigating menus
                        and makes the extra main menu option (intro)
                        visible. (Version 1)
        MSG-UNDO.IPS    Revert the ROM to the messages used in the
                        Sydra patch.
        ML-x.IPS        Move list patch to activate extended move sets
                        and to make many compatible moves available.
        ML-ORIG.IPS     Revert the ROM back to the original moves list.
        NL-JONx.IPS     Japanese locale name set with original (fake)
                        character names and no emphasis (color).
        NL-JOEx.IPS     Japanese locale name set with original (fake)
                        character names and emphasis (color).
        NL-JRNx.IPS     Japanese locale name set with real character
                        names and no emphasis (color).
        NL-JREx.IPS     Japanese locale name set with real character
                        names and emphasis (color).
        NL-UNDO.IPS     Revert the ROM back to the name list of Sydra's
                        patch (this is NOT Sydra's patch and does not
                        install the hacked letter tiles- it only changes
                        the tile codes for the labels).

        NOTE: Higher values of x denote later versions.

        With the possible exception of the first patch, these patches
        can be applied in any order. The name and move table patches
        overwrite the entire move table, so they will no screw up
        if one patch is already applied. I do not recommend applying
        Sydra's translation patch over one of these, as Sydra's patch
        assumes the presence of a particular name table. By the way,
        Sydra's patch is not required for these patches to work (at
        least, I don't think it is). 

XXIII. This looks cool. Can I help you with it?

        Unfortunately, I have now stockpiled so much useless information
        about this game that my brain feels like its melting. I was
        working on this off and on as a pet project for many months
        before mentioning it to anyone. In fact, until I mentioned the
        new name patch, I assumed no one would give a damn and never
        had any intention of using all of this information to do anything
        other than make personal utilities. The down side of this is that
        it would take so long to bring someone else up to speed on the
        structures and other miscellaneous junk relating to this project
        that I could probably have done everything solo by then. Also,
        this project is probably too small to consider setting up a
        coordinated effort as a good use of time. (It's really sad when
        you realize that you are beginning to talk like a developer
        rather than a programmer.)

XXIV. So is the final patch going provide a full ROM translation?

        Unfortunately, no. Apparently, for whatever reason, the game uses
        some tile messages which can only be edited by altering the
        graphic images. Since there is currently no utility that I know
        of that does this, there is nothing that can be done to translate
        these messages. Here is a list of the messages that I currently
        know of that are tiled in this manner:
                1. All move category tiles in the moves section
                2. The 'overwrite' message in the character save section
                3. The 'tie breaker' message in a league match
                4. The character set categories in the upper left corner
                   of the name entry screens.

XXV. How do I get the 100+ limit on the wrestler edit skills?

        Set the desired character's title status to the maximum
        value (63).

XXVI. What's the difference between safe and destructive deletion?

        Safe deletion justs switches an active flag so that the
        slot is considered empty. However, no data is disturbed.
        I decided to provide this in case someone has a habit of
        accidently deleting the wrong character. If you use safe
        delete, you can restore the record with the undelete mode.
        A destructive delete clears the entire record, making it
        impossible to recover.

XXVII. What's the Brody fix?

        The last bug that I knew of, after the exploded head, was
        a bug that caused the ROM emulation to lock up at the
        introduction screen of Bruiser Brody. After some picking
        through the ROM binary code, I found no reason for this to
        occur. The stranger part is that it only happened on that
        one label (when another label reference was used, it was
        displayed with no problems). So, rather than spending a
        lot of time trying to figure out why, I just added an
        extra label for Bruiser Brody, using one of the unused
        move labels, and replaced the reference. As far as I know,
        this fixes all of the ROM's operational bugs. (This does
        not mean that it will run perfectly- the emulator still
        has to emulate it correctly.)

XXVIII. I noticed that the computer doesn't time some turnbuckle moves right.
        What's wrong?

        The built-in logic system in the game makes uses many
        assumptions that are covered by the restrictions placed on
        the moves list. The moves list patches make more moves
        available in different positions that they were originally
        not intended to be available. In some cases this causes
        the computer to use incorrect timing when trying to do
        the moves. So far, the only real places that I have noticed
        this is when the turnbuckle tries to do turnbuckle moves.
        The first two moves are assumed to be mat moves, while the
        second two moves are assumed to attack standing opponents.
        For this reason, the CP will wait for a character to stand
        before doing the second two, while it will try to do the
        first two while the opponent is on the mat. For this reason,
        a mat move put in the second set or a standing move put in
        the first set will miss almost everytime (even when the
        computer intended it to hit). A workaround to this is to
        set the logic of the character to exclude these categories
        from the CPU logic. This will still leave them available
        to human players without crippling the CP controlled version
        with stupid turnbuckle behavior. The bottom line for the
        moves patch is that you shouldn't use a move outside of
        its category if it can be shifted around to an intended
        category. For example, don't put two standing turnbuckle
        moves in the mat moves slots while putting two mat moves
        in the standing move slots. This case would not require
        you to break the intended move set rules. However, to give
        a wrestler three turnbuckle standing attacks and one mat
        turnbuckle attack would require a mismatched category.

XXIX. Why did you add the SRAM delete modes- I can do that in the game?

        One of them you can do, but the other two you can't. My
        motivation for this came after I accidently deleted the
        wrong character and exited the emulator before realizing
        it (making it impossible to recover my original SRAM).
        However, I remembered that an empty SRAM I had still had
        data all over the place. Apparently, to speed up processing
        the development group only toggles a flag when a character
        is deleted- leaving all of the data intact. So I made a
        mode to toggle it back to activate so that an accidently
        deleted character can be recovered. The other two modes
        (for deleting) are mainly for the sake of having the
        SRAM modes parallel the module modes. Generally, when
        programming undelete utilities, it is a good idea to
        package them with delete and expunge utilities also.

XXX. What's the difference between modularizing and refreshing an
     SRAM character?

        When a character is first moved to a module, it is either
        for the purpose of archiving or transporting the character.
        Later on, you may find that you desire to change the
        character for whatever reason. Rather than requiring you
        to type in the description strings again, I added a
        quick update mode for module records that reads the
        existing record and updates the raw character data without
        changing the other module information. Mainly, refresh is
        just provided for convenience.

XXXI. I was going to set the HWA Championship opponents list to a
      series of EDIT and ROM characters, but I am afraid to use the
      pre-made list files because some of the SRAM slots listed in
      that list are actually empty.

        I put as much failsafe checks into the ROM editing routines
        as I can come up with. In the case of the title match list
        generating routine, it checks for valid ranges and the
        existance of the SRAM character in the SRAM. If the SRAM
        slot is empty, the reference in the file is ignored. Whenever
        any message is ignored, the utility generates an error
        message that is meant to inform you what line was ignored and
        why. This is done so that incorrect references can also be
        identified. So, basically, as far as I know, there is no way
        to mess up the ROM with the opponent list generating mode.

XXXII. I tried to use Giant Baba's body for an Edit wrestler, but it
       keeps getting replaced when I enter the Make section of the Edit
       menu.

        Apparently, that's why they did not include this graphic with
        the other unused body graphics in the make section. There is
        apparently some problem with accessing it, though it seemed to
        work fine on my test character when I played a match with it.
        To make an Edit character use this graphic, you have to totally
        make the character, then use SFHack to set the body and portrait
        when you no longer intend to edit the character. Every time you
        do edit the character, you will have to use SFHack again to
        reset the body graphic to the Giant Baba's graphic.

-------------------------------------------------------------------------------

Usage:

        SFHack is many utilities bundled together. To see the available
        mode sets, just type 'sfhack'. This will show entries similar to:

                d??     Defaults Modes
                g??     General Operation Modes
                m??     Module Modes
                r??     ROM Character Modes
                s??     SRAM Character Modes

        For a list of specific operating modes in a category, the shown
        three letter code can be used as the operating mode. For example,
        the see all available operations for modules, type 'sfhack m??'
        and a listing similar to the following will appear.

                mcc     Catalog Module Contents
                mcs     Copy SRAM Character to Module
                mec     Delete Module Character

        For the operating instructions for any of these options, you
        can then type something like 'sfhack mcc'. This will give a
        general command line and describe any values that are not
        self-explanatory (boy, I know I'm gonna get slammed on that
        one).

-------------------------------------------------------------------------------

The Modes:

        SFHack is divided into sets of operations that center around
        specific data structures. Currently, the following sets are:
                c??     Modes dealing with the championship and
                        title match records stored in the SRAM.
                d??     Modes dealing with the defaults of the game
                        including match defaults and the defaults
                        SRAM character (DEFAULT GUY).
                e??     Modes that deal with the Elimination match
                        teams stored in the ROM and SRAM.
                g??     General modes that don't really fit into
                        any of the other categories. This includes
                        physical file manipulations, like patching
                        and checksum recalculations.
                m??     Modes that center around the storing and
                        manipulation of characters in modules.
                r??     Modes that center around the storing and
                        manipulation of characters in ROM slots.
                s??     Modes that center around the storing and
                        manipulation of characters in SRAM slots.

